import 'package:json_annotation/json_annotation.dart';
part 'select_sond.g.dart';

@JsonSerializable()
class SelectSond extends Object {
  @JsonKey(name: 'code')
  int code;

  @JsonKey(name: 'data')
  Data data;

  @JsonKey(name: 'message')
  String message;

  @JsonKey(name: 'notice')
  String notice;

  @JsonKey(name: 'subcode')
  int subcode;

  @JsonKey(name: 'time')
  int time;

  @JsonKey(name: 'tips')
  String tips;

  SelectSond(
    this.code,
    this.data,
    this.message,
    this.notice,
    this.subcode,
    this.time,
    this.tips,
  );

  factory SelectSond.fromJson(Map<String, dynamic> srcJson) => _$SelectSondFromJson(srcJson);

  Map<String, dynamic> toJson() => _$SelectSondToJson(this);
}

@JsonSerializable()
class Data extends Object {
  @JsonKey(name: 'keyword')
  String keyword;

  @JsonKey(name: 'priority')
  int priority;

  @JsonKey(name: 'qc')
  var qc;

  @JsonKey(name: 'semantic')
  Semantic semantic;

  @JsonKey(name: 'song')
  Song song;

  @JsonKey(name: 'tab')
  int tab;

  @JsonKey(name: 'taglist')
  var taglist;

  @JsonKey(name: 'totaltime')
  int totaltime;

  @JsonKey(name: 'zhida')
  Zhida zhida;

  Data(
    this.keyword,
    this.priority,
    this.qc,
    this.semantic,
    this.song,
    this.tab,
    this.taglist,
    this.totaltime,
    this.zhida,
  );

  factory Data.fromJson(Map<String, dynamic> srcJson) => _$DataFromJson(srcJson);

  Map<String, dynamic> toJson() => _$DataToJson(this);
}

@JsonSerializable()
class Semantic extends Object {
  @JsonKey(name: 'curnum')
  int curnum;

  @JsonKey(name: 'curpage')
  int curpage;

  @JsonKey(name: 'list')
  var list;

  @JsonKey(name: 'totalnum')
  int totalnum;

  Semantic(
    this.curnum,
    this.curpage,
    this.list,
    this.totalnum,
  );

  factory Semantic.fromJson(Map<String, dynamic> srcJson) => _$SemanticFromJson(srcJson);

  Map<String, dynamic> toJson() => _$SemanticToJson(this);
}

@JsonSerializable()
class Song extends Object {
  @JsonKey(name: 'curnum')
  int curnum;

  @JsonKey(name: 'curpage')
  int curpage;

  @JsonKey(name: 'list')
  var list;

  @JsonKey(name: 'totalnum')
  int totalnum;

  Song(
    this.curnum,
    this.curpage,
    this.list,
    this.totalnum,
  );

  factory Song.fromJson(Map<String, dynamic> srcJson) => _$SongFromJson(srcJson);

  Map<String, dynamic> toJson() => _$SongToJson(this);
}

@JsonSerializable()
class List extends Object {
  @JsonKey(name: 'action')
  Action action;

  @JsonKey(name: 'album')
  Album album;

  @JsonKey(name: 'chinesesinger')
  int chinesesinger;

  @JsonKey(name: 'desc')
  String desc;

  @JsonKey(name: 'desc_hilight')
  String descHilight;

  @JsonKey(name: 'docid')
  String docid;

  @JsonKey(name: 'file')
  File file;

  @JsonKey(name: 'fnote')
  int fnote;

  @JsonKey(name: 'genre')
  int genre;

  @JsonKey(name: 'grp')
  var grp;

  @JsonKey(name: 'id')
  int id;

  @JsonKey(name: 'index_album')
  int indexAlbum;

  @JsonKey(name: 'index_cd')
  int indexCd;

  @JsonKey(name: 'interval')
  int interval;

  @JsonKey(name: 'isonly')
  int isonly;

  @JsonKey(name: 'ksong')
  Ksong ksong;

  @JsonKey(name: 'language')
  int language;

  @JsonKey(name: 'lyric')
  String lyric;

  @JsonKey(name: 'lyric_hilight')
  String lyricHilight;

  @JsonKey(name: 'mid')//试听id
  String mid;

  @JsonKey(name: 'mv')
  Mv mv;

  @JsonKey(name: 'name')
  String name;

  @JsonKey(name: 'newStatus')
  int newStatus;

  @JsonKey(name: 'nt')
  int nt;

  @JsonKey(name: 'pay')
  Pay pay;

  @JsonKey(name: 'pure')
  int pure;

  @JsonKey(name: 'singer')
  var singer;

  @JsonKey(name: 'status')
  int status;

  @JsonKey(name: 'subtitle')
  String subtitle;

  @JsonKey(name: 't')
  int t;

  @JsonKey(name: 'tag')
  int tag;

  @JsonKey(name: 'time_public')
  String timePublic;

  @JsonKey(name: 'title')
  String title;

  @JsonKey(name: 'title_hilight')
  String titleHilight;

  @JsonKey(name: 'type')
  int type;

  @JsonKey(name: 'url')
  String url;

  @JsonKey(name: 'ver')
  int ver;

  @JsonKey(name: 'volume')
  Volume volume;

  List(
    this.action,
    this.album,
    this.chinesesinger,
    this.desc,
    this.descHilight,
    this.docid,
    this.file,
    this.fnote,
    this.genre,
    this.grp,
    this.id,
    this.indexAlbum,
    this.indexCd,
    this.interval,
    this.isonly,
    this.ksong,
    this.language,
    this.lyric,
    this.lyricHilight,
    this.mid,
    this.mv,
    this.name,
    this.newStatus,
    this.nt,
    this.pay,
    this.pure,
    this.singer,
    this.status,
    this.subtitle,
    this.t,
    this.tag,
    this.timePublic,
    this.title,
    this.titleHilight,
    this.type,
    this.url,
    this.ver,
    this.volume,
  );

  factory List.fromJson(Map<String, dynamic> srcJson) => _$ListFromJson(srcJson);

  Map<String, dynamic> toJson() => _$ListToJson(this);
}

@JsonSerializable()
class Action extends Object {
  @JsonKey(name: 'alert')
  int alert;

  @JsonKey(name: 'icons')
  int icons;

  @JsonKey(name: 'msg')
  int msg;

  @JsonKey(name: 'switch')
  int awitch;

  Action(
    this.alert,
    this.icons,
    this.msg,
    this.awitch,
  );

  factory Action.fromJson(Map<String, dynamic> srcJson) => _$ActionFromJson(srcJson);

  Map<String, dynamic> toJson() => _$ActionToJson(this);
}

@JsonSerializable()
class Album extends Object {
  @JsonKey(name: 'id')
  int id;

  @JsonKey(name: 'mid')
  String mid;

  @JsonKey(name: 'name')
  String name;

  @JsonKey(name: 'subtitle')
  String subtitle;

  @JsonKey(name: 'title')
  String title;

  @JsonKey(name: 'title_hilight')
  String titleHilight;

  Album(
    this.id,
    this.mid,
    this.name,
    this.subtitle,
    this.title,
    this.titleHilight,
  );

  factory Album.fromJson(Map<String, dynamic> srcJson) => _$AlbumFromJson(srcJson);

  Map<String, dynamic> toJson() => _$AlbumToJson(this);
}

@JsonSerializable()
class File extends Object {
  @JsonKey(name: 'b_30s')
  int b30s;

  @JsonKey(name: 'e_30s')
  int e30s;

  @JsonKey(name: 'media_mid')
  String mediaMid;

  @JsonKey(name: 'size_128')
  int size128;

  @JsonKey(name: 'size_128mp3')
  int size128mp3;

  @JsonKey(name: 'size_320')
  int size320;

  @JsonKey(name: 'size_320mp3')
  int size320mp3;

  @JsonKey(name: 'size_aac')
  int sizeAac;

  @JsonKey(name: 'size_ape')
  int sizeApe;

  @JsonKey(name: 'size_dts')
  int sizeDts;

  @JsonKey(name: 'size_flac')
  int sizeFlac;

  @JsonKey(name: 'size_ogg')
  int sizeOgg;

  @JsonKey(name: 'size_try')
  int sizeTry;

  @JsonKey(name: 'strMediaMid')
  String strMediaMid;

  @JsonKey(name: 'try_begin')
  int tryBegin;

  @JsonKey(name: 'try_end')
  int tryEnd;

  File(
    this.b30s,
    this.e30s,
    this.mediaMid,
    this.size128,
    this.size128mp3,
    this.size320,
    this.size320mp3,
    this.sizeAac,
    this.sizeApe,
    this.sizeDts,
    this.sizeFlac,
    this.sizeOgg,
    this.sizeTry,
    this.strMediaMid,
    this.tryBegin,
    this.tryEnd,
  );

  factory File.fromJson(Map<String, dynamic> srcJson) => _$FileFromJson(srcJson);

  Map<String, dynamic> toJson() => _$FileToJson(this);
}

@JsonSerializable()
class Ksong extends Object {
  @JsonKey(name: 'id')
  int id;

  @JsonKey(name: 'mid')
  String mid;

  Ksong(
    this.id,
    this.mid,
  );

  factory Ksong.fromJson(Map<String, dynamic> srcJson) => _$KsongFromJson(srcJson);

  Map<String, dynamic> toJson() => _$KsongToJson(this);
}

@JsonSerializable()
class Mv extends Object {
  @JsonKey(name: 'id')
  int id;

  @JsonKey(name: 'vid')
  String vid;

  Mv(
    this.id,
    this.vid,
  );

  factory Mv.fromJson(Map<String, dynamic> srcJson) => _$MvFromJson(srcJson);

  Map<String, dynamic> toJson() => _$MvToJson(this);
}

@JsonSerializable()
class Pay extends Object {
  @JsonKey(name: 'pay_down')
  int payDown;

  @JsonKey(name: 'pay_month')
  int payMonth;

  @JsonKey(name: 'pay_play')
  int payPlay;

  @JsonKey(name: 'pay_status')
  int payStatus;

  @JsonKey(name: 'price_album')
  int priceAlbum;

  @JsonKey(name: 'price_track')
  int priceTrack;

  @JsonKey(name: 'time_free')
  int timeFree;

  Pay(
    this.payDown,
    this.payMonth,
    this.payPlay,
    this.payStatus,
    this.priceAlbum,
    this.priceTrack,
    this.timeFree,
  );

  factory Pay.fromJson(Map<String, dynamic> srcJson) => _$PayFromJson(srcJson);

  Map<String, dynamic> toJson() => _$PayToJson(this);
}

@JsonSerializable()
class Singer extends Object {
  @JsonKey(name: 'id')
  int id;

  @JsonKey(name: 'mid')
  String mid;

  @JsonKey(name: 'name')
  String name;

  @JsonKey(name: 'title')
  String title;

  @JsonKey(name: 'title_hilight')
  String titleHilight;

  @JsonKey(name: 'type')
  int type;

  @JsonKey(name: 'uin')
  int uin;

  Singer(
    this.id,
    this.mid,
    this.name,
    this.title,
    this.titleHilight,
    this.type,
    this.uin,
  );

  factory Singer.fromJson(Map<String, dynamic> srcJson) => _$SingerFromJson(srcJson);

  Map<String, dynamic> toJson() => _$SingerToJson(this);
}

@JsonSerializable()
class Volume extends Object {
  @JsonKey(name: 'gain')
  double gain;

  @JsonKey(name: 'lra')
  double lra;

  @JsonKey(name: 'peak')
  double peak;

  Volume(
    this.gain,
    this.lra,
    this.peak,
  );

  factory Volume.fromJson(Map<String, dynamic> srcJson) => _$VolumeFromJson(srcJson);

  Map<String, dynamic> toJson() => _$VolumeToJson(this);
}

@JsonSerializable()
class Zhida extends Object {
  @JsonKey(name: 'type')
  int type;

  @JsonKey(name: 'zhida_singer')
  Zhida_singer zhidaSinger;

  Zhida(
    this.type,
    this.zhidaSinger,
  );

  factory Zhida.fromJson(Map<String, dynamic> srcJson) => _$ZhidaFromJson(srcJson);

  Map<String, dynamic> toJson() => _$ZhidaToJson(this);
}

@JsonSerializable()
class Zhida_singer extends Object {
  @JsonKey(name: 'albumNum')
  int albumNum;

  @JsonKey(name: 'hotalbum')
  var hotalbum;

  @JsonKey(name: 'hotsong')
  var hotsong;

  @JsonKey(name: 'mvNum')
  int mvNum;

  @JsonKey(name: 'singerID')
  int singerID;

  @JsonKey(name: 'singerMID')
  String singerMID;

  @JsonKey(name: 'singerName')
  String singerName;

  @JsonKey(name: 'singerPic')
  String singerPic;

  @JsonKey(name: 'singername_hilight')
  String singernameHilight;

  @JsonKey(name: 'songNum')
  int songNum;

  Zhida_singer(
    this.albumNum,
    this.hotalbum,
    this.hotsong,
    this.mvNum,
    this.singerID,
    this.singerMID,
    this.singerName,
    this.singerPic,
    this.singernameHilight,
    this.songNum,
  );

  factory Zhida_singer.fromJson(Map<String, dynamic> srcJson) => _$Zhida_singerFromJson(srcJson);

  Map<String, dynamic> toJson() => _$Zhida_singerToJson(this);
}

@JsonSerializable()
class Hotalbum extends Object {
  @JsonKey(name: 'albumID')
  int albumID;

  @JsonKey(name: 'albumMID')
  String albumMID;

  @JsonKey(name: 'albumName')
  String albumName;

  @JsonKey(name: 'albumname_hilight')
  String albumnameHilight;

  Hotalbum(
    this.albumID,
    this.albumMID,
    this.albumName,
    this.albumnameHilight,
  );

  factory Hotalbum.fromJson(Map<String, dynamic> srcJson) => _$HotalbumFromJson(srcJson);

  Map<String, dynamic> toJson() => _$HotalbumToJson(this);
}

@JsonSerializable()
class Hotsong extends Object {
  @JsonKey(name: 'f')
  String f;

  @JsonKey(name: 'songID')
  int songID;

  @JsonKey(name: 'songMID')
  String songMID;

  @JsonKey(name: 'songName')
  String songName;

  @JsonKey(name: 'songname_hilight')
  String songnameHilight;

  Hotsong(
    this.f,
    this.songID,
    this.songMID,
    this.songName,
    this.songnameHilight,
  );

  factory Hotsong.fromJson(Map<String, dynamic> srcJson) => _$HotsongFromJson(srcJson);

  Map<String, dynamic> toJson() => _$HotsongToJson(this);
}
